package com.ahorresas.controllers;

import com.ahorresas.modelo.daos.DetalleAhorroDao;
import com.ahorresas.modelo.beans.DetalleAhorroBean;
import java.io.IOException;
import java.sql.Date;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DetalleAhorroController extends HttpServlet {
    
    private final DetalleAhorroDao detalleAhorroDao = new DetalleAhorroDao();
    private String id_detalle;
    private String id_ahorro;
    private String mes;
    private String valor_ahorro;
    private int resultado;
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        /*Control del boton accionado desde la página JSP*/
        String accion = request.getParameter("accion");
        if(accion == null){
            accion = "";
        }
        
        id_detalle = request.getParameter("id_detalle");
        id_ahorro = request.getParameter("id_ahorro");
        mes = request.getParameter("mes");
        valor_ahorro = request.getParameter("valor_ahorro");
        
        DetalleAhorroBean detalleAhorro;
        String validacion;
        resultado = 0;
        
        switch (accion) {
            case "consultar":
                validacion = obligatorios(false);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    detalleAhorro = detalleAhorroDao.buscarDetalleAhorro(id_detalle);
                    if(detalleAhorro != null){
                        llenarCampos(request, detalleAhorro);
                        request.setAttribute("msg", "El detalle fué encontrado con éxito");
                    }else{
                        request.setAttribute("msg", "El detalle no pudo ser encontrado");
                    }
                }
                break;
            case "guardar":
                validacion = obligatorios(true);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    detalleAhorro = detalleAhorroDao.buscarDetalleAhorro(id_detalle);
                    if(detalleAhorro != null){
                        detalleAhorro.setIdAhorro(Integer.valueOf(id_ahorro));
                        detalleAhorro.setMes(Integer.valueOf(Integer.valueOf(mes)));
                        detalleAhorro.setValorAhorro(Double.valueOf(valor_ahorro));

                        resultado = detalleAhorroDao.modificarDetalleAhorro(detalleAhorro);
                    } else {
                        detalleAhorro = new DetalleAhorroBean();
                        detalleAhorro.setIdAhorro(Integer.valueOf(id_ahorro));
                        detalleAhorro.setMes(Integer.valueOf(mes));
                        detalleAhorro.setValorAhorro(Double.valueOf(valor_ahorro));

                        resultado = detalleAhorroDao.crearDetalleAhorro(detalleAhorro);
                    }
                    
                    if(resultado != 0){
                        llenarCampos(request, null);
                        request.setAttribute("msg", "El detalle del ahorro fué guardado con éxito.");
                    } else {
                        request.setAttribute("msg", "El detalle del ahorro no pudo ser guardado.");
                    }
                }
                break;
            case "eliminar":
                validacion = obligatorios(false);
                if(validacion.length() > 0){
                    mantenerDatos(request);
                    request.setAttribute("msg", validacion);
                } else {
                    resultado = detalleAhorroDao.eliminarDetalleAhorro(Integer.valueOf(id_detalle));
                    if(resultado == 1){
                        llenarCampos(request, null);
                        request.setAttribute("msg", "El detalle del ahorro fué eliminado con éxito");
                    } else {
                        request.setAttribute("msg", "El detalle del ahorro no pudo ser eliminado.");
                    }
                }
                break;
            case "listar":
                List<DetalleAhorroBean> listaDetallesAhorros = detalleAhorroDao.listarDetalleAhorros();
                request.setAttribute("lista", listaDetallesAhorros);
                break;
        }
        
        request.getRequestDispatcher("./jsp/detalleAhorro.jsp").forward(request, response);
    }
    
    public String obligatorios(boolean guardado){
        StringBuilder validacion = new StringBuilder();
        if(id_detalle == null || id_detalle.equals("")){
            validacion.append("El campo 'Código de detalle' no debe estar vacío. <br>");
        } else {
            try {
                Integer.valueOf(id_detalle);
            } catch (NumberFormatException e) {
                validacion.append("El campo 'Código de detalle' debe ser numérico. <br>");
            }
        }

        /* Si es guardado de datos valida los demás campos de lo contrario 
         * retorna la validación sobre el clave 
         */
        if(!guardado) {
            return validacion.toString();
        }
        
        if(id_ahorro.equals("")){
            validacion.append("Debe seleccionar una de las opciones de 'ahorros'. <br>");
        }
        if(mes == null || mes.equals("")){
            validacion.append("El campo 'mes' no debe estar vacío. <br>");
        } else {
            try {
                Long.valueOf(mes);
            } catch (NumberFormatException e) {
                validacion.append("El campo 'mes' es numérico. <br>");
            }
        }
        if(valor_ahorro == null || valor_ahorro.equals("")){
            validacion.append("El campo 'Valor del Ahorro' no debe estar vacío. <br>");
        } else {
            try {
                Long.valueOf(valor_ahorro);
            } catch (NumberFormatException e) {
                validacion.append("El campo 'Valor del Ahorro' es numérico. <br>");
            }
        }
        return validacion.toString();
    }
    
    public void llenarCampos(HttpServletRequest request, DetalleAhorroBean detalleAhorro){
        request.setAttribute("id_detalle", detalleAhorro != null ? detalleAhorro.getIdDetalle(): "");
        request.setAttribute("id_ahorro", detalleAhorro != null ? detalleAhorro.getIdAhorro(): "");
        request.setAttribute("mes", detalleAhorro != null ? detalleAhorro.getMes() : "");
        request.setAttribute("valor_ahorro", detalleAhorro != null ? detalleAhorro.getValorAhorro(): "");
    }
    
    public void mantenerDatos(HttpServletRequest request){
        request.setAttribute("id_detalle", id_detalle != null ? id_detalle : "");
        request.setAttribute("id_ahorro", id_ahorro != null ? id_ahorro : "");
        request.setAttribute("mes", mes != null ? mes : "");
        request.setAttribute("valor_ahorro", valor_ahorro != null ? valor_ahorro : "");
    }
}
